package com.libbase.utils

import android.content.Context
import android.os.Build
import android.util.TypedValue
import kotlin.math.roundToInt

class DensityUtils {
    companion object {
        val instance: DensityUtils by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
            DensityUtils()
        }
    }

    /**
     * 根据手机的分辨率从 dp 转成为 px(像素)
     */
    fun dp2px(context: Context, dpValue: Float): Int =
        (dpValue * context.resources.displayMetrics.density).roundToInt()

    /**
     * 根据手机的分辨率从 px(像素) 转成为 dp
     */
    fun px2dp(context: Context, pxValue: Float): Int =
        (pxValue / context.resources.displayMetrics.density).roundToInt()

    /**
     * sp 转换 px
     */
    fun sp2px(context: Context, spValue: Float): Int {
        return if (Build.VERSION.SDK_INT >= 34) {
            TypedValue.applyDimension(
                TypedValue.COMPLEX_UNIT_SP,
                spValue,
                context.resources.displayMetrics
            ).toInt()
        } else {
            @Suppress("DEPRECATION")
            (spValue * context.resources.displayMetrics.scaledDensity).roundToInt()
        }
    }

    /**
     * px 转换 sp
     */
    fun px2sp(context: Context, pxValue: Float): Int {
        return if (Build.VERSION.SDK_INT >= 34) {
            TypedValue.applyDimension(
                TypedValue.COMPLEX_UNIT_SP,
                pxValue,
                context.resources.displayMetrics
            ).toInt()
        } else {
            @Suppress("DEPRECATION")
            (pxValue / context.resources.displayMetrics.scaledDensity).roundToInt()
        }

    }
}